<!-- HTML header for doxygen 1.8.14-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="cache-control" content="max-age=86400"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>GBDK 2020 Docs: Links, Tools and Debugging</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">GBDK 2020 Docs
   &#160;<span id="projectnumber">4.4.0</span>
   </div>
   <div id="projectbrief">API Documentation for GBDK 2020</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('docs_links_and_tools.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="PageDoc"><div class="header">
  <div class="headertitle">
<div class="title">Links, Tools and Debugging </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>This is a brief list of useful tools and information. It is not meant to be complete or exhaustive, for a larger list see the <a class="el" href="docs_links_and_tools.html#awesome_gb">Awesome Game Boy Development</a> list.</p>
<p><a class="anchor" id="links_sdcc_docs"></a></p>
<h1><a class="anchor" id="autotoc_md34"></a>
SDCC Compiler Suite User Manual</h1>
<ul>
<li>GBDK-2020 uses the SDCC compiler and related tools. The SDCC manual goes into much more detail about available features and how to use them. <br  />
 <a href="http://sdcc.sourceforge.net/doc/sdccman.pdf">http://sdcc.sourceforge.net/doc/sdccman.pdf</a> <br  />
 <a href="http://sdcc.sourceforge.net">http://sdcc.sourceforge.net</a></li>
<li>The SDCC assembler and linker (sdas / asxxxx and aslink) manual. <br  />
 <a href="https://sourceforge.net/p/sdcc/code/HEAD/tree/trunk/sdcc/sdas/doc/asmlnk.txt">https://sourceforge.net/p/sdcc/code/HEAD/tree/trunk/sdcc/sdas/doc/asmlnk.txt</a></li>
</ul>
<p><a class="anchor" id="links_help_and_community"></a></p>
<h1><a class="anchor" id="autotoc_md35"></a>
Getting Help</h1>
<ul>
<li>GBDK Discord community: <br  />
 <a href="https://github.com/gbdk-2020/gbdk-2020/#discord-servers">https://github.com/gbdk-2020/gbdk-2020/#discord-servers</a></li>
<li>Game Boy discussion forum: <br  />
 <a href="https://gbdev.gg8.se/forums/">https://gbdev.gg8.se/forums/</a></li>
</ul>
<p><a class="anchor" id="links_gameboy_docs"></a></p>
<h1><a class="anchor" id="autotoc_md36"></a>
Game Boy Documentation</h1>
<ul>
<li><a class="anchor" id="Pandocs"></a> <b>Pandocs</b> <br  />
 Extensive and up-to-date technical documentation about the Game Boy and related hardware. <br  />
 <a href="https://gbdev.io/pandocs/">https://gbdev.io/pandocs/</a></li>
<li><a class="anchor" id="awesome_gb"></a> <b>Awesome Game Boy Development list</b> <br  />
 A list of Game Boy/Color development resources, tools, docs, related projects and homebrew. <br  />
 <a href="https://gbdev.io/resources.html">https://gbdev.io/resources.html</a></li>
</ul>
<p><a class="anchor" id="links_sms_gg_docs"></a></p>
<h1><a class="anchor" id="autotoc_md37"></a>
Sega Master System / Game Gear Documentation</h1>
<ul>
<li><a class="anchor" id="smspower"></a> <b>SMS Power!</b> <br  />
 Community site with technical documentation, reviews and other content related to the Sega 8-bit systems. <br  />
 <a href="https://www.smspower.org/">https://www.smspower.org/</a></li>
</ul>
<p><a class="anchor" id="links_megaduck_docs"></a></p>
<h1><a class="anchor" id="autotoc_md38"></a>
Mega Duck / Cougar Boy Documentation</h1>
<ul>
<li><a class="anchor" id="megaduckdev"></a> <b>MegaDuck.dev</b> <br  />
 A collection of technical information and resources for the Mega Duck / Cougar Boy console. <br  />
 <a href="https://megaduck.dev/">https://megaduck.dev/</a></li>
</ul>
<p><a class="anchor" id="links_gbdk_tutorials"></a></p>
<h1><a class="anchor" id="autotoc_md39"></a>
Tutorials</h1>
<ul>
<li><a class="anchor" id="tutorials_larolds"></a> <b>Larold's Jubilant Junkyard Tutorials</b> <br  />
 Several walk throughs about the fundamentals of developing for the Game Boy with GBDK-2020. There are simple examples with source code. <br  />
 <a href="https://laroldsjubilantjunkyard.com/tutorials/">https://laroldsjubilantjunkyard.com/tutorials/</a></li>
<li><a class="anchor" id="tutorials_gamingmonsters"></a> <b>Gaming Monsters Tutorials</b> <br  />
 Several video tutorials and code for making games with GBDK/GBDK-2020. <br  />
 <a href="https://www.youtube.com/playlist?list=PLeEj4c2zF7PaFv5MPYhNAkBGrkx4iPGJo">https://www.youtube.com/playlist?list=PLeEj4c2zF7PaFv5MPYhNAkBGrkx4iPGJo</a> <br  />
 <a href="https://github.com/gingemonster/GamingMonstersGameBoySampleCode">https://github.com/gingemonster/GamingMonstersGameBoySampleCode</a></li>
<li><a class="anchor" id="tutorials_typorter"></a> <b>Pocket Leage Tutorial</b> <br  />
 <a href="https://blog.ty-porter.dev/development/2021/04/04/writing-a-gameboy-game-in-2021-pt-0.html">https://blog.ty-porter.dev/development/2021/04/04/writing-a-gameboy-game-in-2021-pt-0.html</a></li>
</ul>
<p><a class="anchor" id="link_examples"></a></p>
<h1><a class="anchor" id="autotoc_md40"></a>
Example code</h1>
<ul>
<li><a class="anchor" id="examples_gbdk_playground"></a> <b>Simplified GBDK examples</b> <br  />
 <a href="https://github.com/mrombout/gbdk_playground/commits/master">https://github.com/mrombout/gbdk_playground/commits/master</a></li>
</ul>
<p><a class="anchor" id="links_graphic"></a></p>
<h1><a class="anchor" id="autotoc_md41"></a>
Graphics Tools</h1>
<ul>
<li><a class="anchor" id="gbtd_gbmb"></a><a class="anchor" id="gbmb"></a><a class="anchor" id="gbtd"></a> <br  />
 <a class="anchor" id="toxa_gbtd_gbmb"></a> <b>Game Boy Tile Designer and Map Builder (GBTD / GBMB)</b> <br  />
 Sprite / Tile editor and Map Builder that can export to C that works with GBDK. <br  />
 This is an updated version with const export fixed and other improvements. <br  />
 <a href="https://github.com/gbdk-2020/GBTD_GBMB">https://github.com/gbdk-2020/GBTD_GBMB</a><ul>
<li>A GIMP plugin to read/write GBR/GBM files and do map conversion: <br  />
 <a href="https://github.com/bbbbbr/gimp-tilemap-gb">https://github.com/bbbbbr/gimp-tilemap-gb</a></li>
<li>Command line version of the above tool that doesn't require GIMP (png2gbtiles): <br  />
 <a href="https://github.com/bbbbbr/gimp-tilemap-gb/tree/master/console">https://github.com/bbbbbr/gimp-tilemap-gb/tree/master/console</a></li>
</ul>
</li>
<li><a class="anchor" id="Tilemap_Studio"></a> <b>Tilemap Studio</b> <br  />
 A tilemap editor for Game Boy, GBC, GBA, or SNES projects. <br  />
 <a href="https://github.com/Rangi42/tilemap-studio/">https://github.com/Rangi42/tilemap-studio/</a></li>
</ul>
<p><a class="anchor" id="tools_music"></a></p>
<h1><a class="anchor" id="autotoc_md42"></a>
Music And Sound Effects for the Game Boy</h1>
<ul>
<li><a class="anchor" id="hUGEdriver"></a> <b>hUGEtracker</b> and <b>hUGEdriver</b> <br  />
 A tracker and music driver that work with GBDK and RGBDS. It is smaller, more efficient and more versatile than gbt_player. <br  />
 <a href="https://github.com/SuperDisk/hUGEDriver">https://github.com/SuperDisk/hUGEDriver</a> <br  />
 <a href="https://github.com/SuperDisk/hUGETracker">https://github.com/SuperDisk/hUGETracker</a></li>
<li><a class="anchor" id="CBT-FX"></a> <b>CBT-FX</b> <br  />
 A sound effects driver which can play effects created in FX Hammer. <a href="https://github.com/datguywitha3ds/CBT-FX">https://github.com/datguywitha3ds/CBT-FX</a></li>
<li><a class="anchor" id="VGM2GBSFX"></a> <b>VGM2GBSFX</b> <br  />
 A sound effects converter and driver for DMG VGM files, FX Hammer and PCM WAV files. <a href="https://github.com/untoxa/VGM2GBSFX">https://github.com/untoxa/VGM2GBSFX</a></li>
<li><a class="anchor" id="gbt-player"></a> <b>GBT Player</b> <br  />
 A .mod converter and music driver that works with GBDK and RGBDS. <br  />
 <a href="https://github.com/AntonioND/gbt-player">https://github.com/AntonioND/gbt-player</a> <br  />
 Docs from GBStudio that should mostly apply: <a href="https://www.gbstudio.dev/docs/music/">https://www.gbstudio.dev/docs/music/</a></li>
</ul>
<h1><a class="anchor" id="autotoc_md43"></a>
Music And Sound Effects for the SMS/Game Gear</h1>
<ul>
<li><a class="anchor" id="Banjo"></a> <b>Banjo</b> <br  />
 A sound driver for Sega Master System and Game Gear which can import from Furnace tracker. <br  />
<ul>
<li><a href="https://github.com/joffb/banjo">https://github.com/joffb/banjo</a> An example of using it with GBDK can be found in the CrossZGB engine.</li>
<li><a href="https://github.com/gbdk-2020/CrossZGB/commit/8ecd46639f3af420cfe139fc155740e8aa14d7c5">https://github.com/gbdk-2020/CrossZGB/commit/8ecd46639f3af420cfe139fc155740e8aa14d7c5</a></li>
</ul>
</li>
</ul>
<p><a class="anchor" id="tools_emulators"></a></p>
<h1><a class="anchor" id="autotoc_md44"></a>
Emulators</h1>
<ul>
<li><a class="anchor" id="emulicious"></a> <b>Emulicious</b> <br  />
 An accurate emulator with extensive tools including source level debugging. <a href="https://emulicious.net/">https://emulicious.net/</a></li>
<li><a class="anchor" id="bgb"></a> <b>BGB</b> <br  />
 Accurate emulator, has useful debugging tools. <br  />
 <a href="http://bgb.bircd.org/">http://bgb.bircd.org/</a></li>
<li><a class="anchor" id="superjuniorsameduck"></a> <b>Super Junior SameDuck</b> The only MegaDuck emulator with support for the Mega Duck Laptop models (Quique and Junior Super Computer) <a href="https://github.com/bbbbbr/SuperJuniorSameDuck">https://github.com/bbbbbr/SuperJuniorSameDuck</a> <br  />
</li>
</ul>
<p><a class="anchor" id="code_editors_hinting"></a>Intellisense in VSCode may have trouble identifying some GBDK types or functions, and therefore flag them as warnings or unidentified.</p>
<p>GBDK platform constants can be declared so that header files are parsed more completely in VSCode. The following <code>c_cpp_properties.json</code> example may be adapted for your own project. </p><pre class="fragment">    {
        "configurations": [
            {
                "name": "gameboy",
                "includePath": [
                    "${workspaceFolder}/src/**",
                    "${workspaceFolder}/res/**",
                    "${workspaceFolder}/include/**",
                    "${workspaceFolder}/../../../gbdk/include/**"
                ],
                "defines": ["__PORT_sm83", "__TARGET_gb"],
                "compilerPath": "",
                "cStandard": "c11",
                "intelliSenseMode": "${default}",
                "compilerArgs": [],
                "browse": {
                    "limitSymbolsToIncludedHeaders": true
                }
            }
        ],
        "version": 4
    }
</pre><p><a class="anchor" id="tools_debug"></a></p>
<h1><a class="anchor" id="autotoc_md45"></a>
Debugging tools</h1>
<ul>
<li><a class="anchor" id="Emulicious_debug"></a> <b>Emulicious debug adapter</b> <br  />
 Provides source-level debugging in VS Code and Sublime Text that works with GBDK2020. <br  />
 <a href="https://marketplace.visualstudio.com/items?itemName=emulicious.emulicious-debugger">https://marketplace.visualstudio.com/items?itemName=emulicious.emulicious-debugger</a><ul>
<li>If compiler optimization is making the program source hard to step through in the debugger then adding this flag to <a class="el" href="docs_toolchain.html#lcc">lcc</a> can help. Note that using this flag will likely reduce code performance and increase code size while enabled, so it is best to only use it temporarily.<ul>
<li><code>-Wf--max-allocs-per-node0</code></li>
</ul>
</li>
</ul>
</li>
<li><a class="anchor" id="romusage"></a> <b>romusage</b> <br  />
 Calculate used and free space in banks (ROM/RAM) and warn about errors such as bank overflows. <br  />
 See <a class="el" href="docs_toolchain_settings.html#romusage-settings">romusage-settings</a></li>
<li><a class="anchor" id="bgb_symbol_conversion"></a> <b>noi file to sym conversion for bgb</b> <br  />
 Debug information in .noi files can be converted to a symbol format that <a class="el" href="docs_links_and_tools.html#bgb">BGB</a> recognizes using:<ul>
<li><a class="el" href="docs_toolchain.html#lcc">lcc</a> : <code>-Wm-yS</code> (with <code>--debug</code>, or <code>-Wl-j</code> to create the .noi)</li>
<li>directly with <a class="el" href="docs_toolchain.html#makebin">makebin</a> : <code>-yS</code> (with <code>-j</code> passed to the linker)</li>
</ul>
</li>
<li><a class="anchor" id="src2sym"></a> <b>src2sym.pl</b> <br  />
 Add line-by-line C source code to the main symbol file in a BGB compatible format. This allows for C source-like debugging in BGB in a limited way. <a href="https://gbdev.gg8.se/forums/viewtopic.php?id=710">https://gbdev.gg8.se/forums/viewtopic.php?id=710</a></li>
</ul>
<p><a class="anchor" id="links_optimizing"></a></p>
<h1><a class="anchor" id="autotoc_md46"></a>
Optimizing Assembly</h1>
<ul>
<li><a class="anchor" id="optimizing_assembly"></a> <b>Optimizing Assembly Code</b> <br  />
 Pret has a useful guide to optimizing assembly for the Game Boy for times when asm using in a project in addition to C. <a href="https://github.com/pret/pokecrystal/wiki/Optimizing-assembly-code">https://github.com/pret/pokecrystal/wiki/Optimizing-assembly-code</a></li>
</ul>
<p><a class="anchor" id="tools_build_ci_cd"></a></p>
<h1><a class="anchor" id="autotoc_md47"></a>
Continuous Integration and Deployment</h1>
<ul>
<li><a class="anchor" id="GBDK_GitHub_Action_Builder"></a> <b>GBDK GitHub Action Builder</b> <br  />
 A Github Action which provides basic CI/CD for building projects based on GBDK (not for building GBDK itself). <br  />
 <a href="https://github.com/wujood/gbdk-2020-github-builder">https://github.com/wujood/gbdk-2020-github-builder</a> </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.14-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
</div>
</body>
</html>
